import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait


def wait_sleep():
    """
    如果直接执行，不添加任何等待，可能会报错
    """
    driver = webdriver.Chrome()
    driver.get("https://vip.ceshiren.com/")
    # 强制等待
    # 不加等待，可能会因为网速等原因产生报错
    # ====报错：no such element: Unable to locate element
    # ====原因：页面未加载完成，就去查找元素，此时这个元素还没有加载出来
    # ====解决方案：在报错之前增加强制等待
    # time.sleep(3)
    # 隐式等待
    # 强制等待的问题：
    # 1.不确定页面的加载时间，可能会银行等待时间过长，而影响用例执行效率
    # 2.不确定页面的加载时间，可能会银行等待时间过短，而导致代码依然报错
    # 使用方式：在代码一开始运行的时候就添加隐式等待的配置，
    # 注意：隐式等待是全局生效，所有在所有的fing_element动作之前就执行此代码
    # 隐式等待只能解决元素查找的问题，不能解决元素交互的问题
    driver.implicitly_wait(3)
    driver.find_element(By.XPATH, "//*[text()='个人中心']")
    # driver.implicitly_wait(5)  修改配置
    driver.find_element(By.XPATH, "//*[text()='题库']")


# 显式等待
def wait_show():
    driver = webdriver.Chrome()
    driver.get("https://vip.ceshiren.com/#/ui_study/")
    driver.maximize_window()
    WebDriverWait(driver, 10).until(expected_conditions.element_to_be_clickable((By.ID, "success_btn")))

    driver.find_element(By.ID, "success_btn").click()
    time.sleep(5)
    res_element = driver.find_element(By.ID, "success_btn")


if __name__ == '__main__':
    # wait_sleep()
    wait_show()
